﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;

namespace System
{
    public static class Extensions
    {
        //extension methods...
        public static string Truncate(this string str, int maxLength)
        {
            if (str.Length <= maxLength)
                return str;
            else
                return str.Remove(maxLength - 1) + "...";
        }


        //Para hacer el breadcrumb, llamado desde Site.Master
        public static string CreateBreadcrumb(this HtmlHelper html, string rawUrl)
        {
            if (rawUrl == "/")
                return String.Empty;

            rawUrl = rawUrl.Replace("%2F", "-");    //En el caso de: /Details?sigla_sec=SIGLA%2F#  --> SIGLA-#

            string[] urlParts = rawUrl.Split(new string[]{"/", "?sigla_sec="}, StringSplitOptions.RemoveEmptyEntries);
            
            List<string> output = new List<string>();
            output.Add("<a href=\"/\">Inicio</a>");

            for (int i=0; i < urlParts.Length; i++)
            {
                urlParts[i] = PreParse(urlParts[i]);
                string parsedPart;
                Traducir.TryGetValue(urlParts[i], out parsedPart);     //Es un diccionario, esta definido mas abajo.

                if (parsedPart == null)
                    output.Add(urlParts[i]);       //Si no tiene traduccion, lo pegamos tal cual.
                else if (parsedPart != "[ignore]")
                    output.Add(parsedPart); //Usamos la traduccion.
            }

            //Devolvemos el breadcrumb concatenado por ">>"
            return String.Join(" » ", output);
        }

        // Aqui dejo los "hacks" q no he parseado correctamente aun.
        // Eventualmente deberia resolver estas cosas mas elegantemente.
        private static string PreParse(string part)
        {
            if (part.StartsWith("LogOn"))
                return "LogOn";
            if (part.StartsWith("Cursos?"))
                return "Cursos";
            int bla;
            if (Int32.TryParse(part, out bla))
                return "Detalles";

            return part;
        }

        private static Dictionary<string, string> _dict;
        private static Dictionary<string, string> Traducir
        {
            get
            {
                if (_dict == null)
                {
                    _dict = new Dictionary<string, string>();
                    //Controllers
                    _dict.Add("Home", "[ignore]");
                    _dict.Add("Account", "<a href=\"/Account/Profile\">Cuenta</a>");
                    _dict.Add("Curso", "<a href=\"/Curso\">Cursos</a>");
                    _dict.Add("Docente", "<a href=\"/Docente\">Docentes</a>");
                    _dict.Add("Search", "<a href=\"/Search\">Búsqueda</a>");
                    _dict.Add("Seccion", "<a href=\"/Curso\">Cursos</a>");
                    _dict.Add("Facultad", "<a href=\"/Facultad\">Facultad</a>");
                    // Home
                    _dict.Add("About", "Acerca de");
                    _dict.Add("Contact", "Contáctanos");
                    _dict.Add("Privacy", "Políticas de privacidad");
                    _dict.Add("Terms", "Términos de uso");
                    //Account
                    _dict.Add("LogOn", "Iniciar sesión");
                    _dict.Add("Profile", "Perfil");
                    _dict.Add("Register", "Registrarse");
                    // Misc.
                    _dict.Add("Details", "[ignore]");
                    _dict.Add("Page", "Resultados");
                }

                return _dict;
            }
        }
    }


}